package com.ruoyi.system.utils;

public class ClassMethodNameUtil {
    // 获取当前类名
    public static String getClassName() {
        return getCallerInfo().getClassName();
    }

    // 获取当前方法名
    public static String getMethodName() {
        return getCallerInfo().getMethodName();
    }

    // 获取调用者信息（堆栈跟踪元素）
    private static StackTraceElement getCallerInfo() {
        // 获取当前线程的堆栈跟踪
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

        /*
        堆栈索引说明：
        0: getStackTrace() 方法
        1: getCallerInfo() 方法
        2: 调用 getCallerInfo 的方法（如 getClassName/getMethodName）
        3: 实际调用者（我们想要的）
        */
        if (stackTrace.length > 3) {
            return stackTrace[3];
        }
        return new StackTraceElement("UnknownClass", "unknownMethod", null, -1);
    }

    // 获取完整调用信息（类名+方法名）
    public static String getFullMethodName() {
        StackTraceElement element = getCallerInfo();
        return element.getClassName() + "." + element.getMethodName();
    }

    // 获取简化调用信息（简单类名+方法名）
    public static String getSimpleMethodName() {
        StackTraceElement element = getCallerInfo();
        String className = element.getClassName();
        int lastDotIndex = className.lastIndexOf('.');
        if (lastDotIndex > 0 && lastDotIndex < className.length() - 1) {
            className = className.substring(lastDotIndex + 1);
        }
        return className + "." + element.getMethodName();
    }
}
